#include "CSkillCfg.h"
#include "commerrno.h"

/////////////////////////////技能效果//////////////////////////////
int CSkillEffCfg::AddConfig(CSkillEffect& stCfgData)
{
    int iIndex = 0;

    if (!stCfgData.IsValidID())
    {
        return ERROR_SKILL_EFF_ERROR_CFG;
    }

    iIndex = FindConfig(stCfgData.GetID());
    if (iIndex >= 0)
    {
        return ERROR_SKILL_EFF_REPEAT_RESID;
    }

    iIndex = _stSkillEffCfgHash.HashAlloc(stCfgData.GetID());

    if (iIndex < 0)
    {
        return RET_SYSTEM_FAIL;
    }

    _stSkillEffCfgHash[iIndex] = stCfgData;

    return 0;
} 

int CSkillEffCfg::FindConfig(unsigned int uiEffID)
{
    int iIndex = _stSkillEffCfgHash.HashFind(uiEffID);
    if (iIndex < 0)
    {
        return -1;//因为返回下标 所以这里必须返回负数
    }

    if (_stSkillEffCfgHash[iIndex].GetID() != uiEffID)
    {
        return -1;//因为返回下标 所以这里必须返回负数
    }

    return iIndex;
}

CSkillEffect& CSkillEffCfg::GetConfig(int iIndex)
{
    return _stSkillEffCfgHash[iIndex];
}

/////////////////////////////技能功能//////////////////////////////
int CSkillAffCfg::AddConfig(CSkillAffect& stCfgData)
{
    int iIndex = 0;

    if (!stCfgData.IsValidID())
    {
        return ERROR_SKILL_AFF_ERROR_CFG;
    }

    iIndex = FindConfig(stCfgData.GetID());
    if (iIndex >= 0)
    {
        return ERROR_SKILL_AFF_REPEAT_RESID;
    }

    iIndex = _stSkillAffCfgHash.HashAlloc(stCfgData.GetID());

    if (iIndex < 0)
    {
        return RET_SYSTEM_FAIL;
    }

    _stSkillAffCfgHash[iIndex] = stCfgData;

    return 0;
} 

int CSkillAffCfg::FindConfig(unsigned int uiAffID)
{
    int iIndex = _stSkillAffCfgHash.HashFind(uiAffID);
    if (iIndex < 0)
    {
        return -1;//因为返回下标 所以这里必须返回负数
    }

    if (_stSkillAffCfgHash[iIndex].GetID() != uiAffID)
    {
        return -1;//因为返回下标 所以这里必须返回负数
    }

    return iIndex;
}

CSkillAffect& CSkillAffCfg::GetConfig(int iIndex)
{
    return _stSkillAffCfgHash[iIndex];
}

/////////////////////////////技能//////////////////////////////
int CSkillCfg::AddConfig(CSkill& stCfgData)
{
    int iIndex = 0;

    if (!stCfgData.IsValidID())
    {
        return ERROR_SKILL_ERROR_CFG;
    }

    iIndex = FindConfig(stCfgData.GetID());
    if (iIndex >= 0)
    {
        return ERROR_SKILL_REPEAT_RESID;
    }

    iIndex = _stSkillCfgHash.HashAlloc(stCfgData.GetID());

    if (iIndex < 0)
    {
        return RET_SYSTEM_FAIL;
    }

    _stSkillCfgHash[iIndex] = stCfgData;

    return 0;
} 

int CSkillCfg::FindConfig(unsigned int uiID)
{
    int iIndex = _stSkillCfgHash.HashFind(uiID);
    if (iIndex < 0)
    {
        return -1;//因为返回下标 所以这里必须返回负数
    }

    if (_stSkillCfgHash[iIndex].GetID() != uiID)
    {
        return -1;//因为返回下标 所以这里必须返回负数
    }

    return iIndex;
}

CSkill& CSkillCfg::GetConfig(int iIndex)
{
    return _stSkillCfgHash[iIndex];
}

